上一文章中咱們理解了每一層通訊協議大約是在做什麼事情以後,咱們這篇文章中將專門來說明,在傳輸層的兩個協議TCP
與UDP
。
為什麼會選這兩個出來說呢 ? 因為在即時影音傳輸的世界中,這兩個協議常常拿出來進行比較(雖然大部份還是 TCP),而且這兩個是所有資料傳輸的基本,不論是要傳輸文字、檔案、語音都一定會透過這兩個來傳送資料,所以這兩個很重要。
這篇文章的主是題就是:
什麼是 TCP 和 UDP 呢? 這協議到底用來做啥的 ?
接下來會就簡單的分成兩個章節:
首先我們已經知道協議是用做完成某事件的過程,那 UDP 是想用來做什麼呢 ?
咱們已經知道傳輸層
主要是處理應用程式與應用程式如何進行傳輸,而要送到某個應用程式最基本所需要的東西就是 Port。
UDP 就是符合咱們最低需求的東西。
UDP 就是用來傳輸資料到某台電腦中的應用程式 (有沒有收到不用管)
它的封包長的如下。
UDP 封包 = 表頭 + 資料
其中表頭欄位如下,事實上也就只是加上 Port 而以,其中 length 只是用來說明它是資料有多大。
Source Port: 55084
Destination Port: 443
Length: 31 (byte)
Ex.
發送方發送:
T1 時間 => UDP A
T2 時間 => UDP B
T3 時間 => UDP C
接受方收到:
T4 時間 => UDP C
T5 時間 => UDP B
T6 時間 => UDP A
UDP 協議已經可以完成傳輸層最低的需求,那還需要 TCP 做什麼呢 ? 上面有說到 UDP 是不可靠傳輸,因此呢 TCP 誕生的目的就是為了可靠的傳輸,也就是說它是負責任的好人。
TCP 是為了達到可靠性傳輸而誕生出來的。
接下來我們來看一下它的執行過程,基本上分三個部份連線
、傳輸
、斷線
,全部理解完基本上你就可以理解為什麼它是可靠性傳輸。
建立完連線以後,就可以開始傳送資料,最基本的型式如下圖。它就是丟一個資料過去,然後回一個 ack。
這裡就提供了最基本的可靠性,如果一個傳送資料的請求,在一定的時間內沒有回應 ack,則就進行重發。
但是這樣不能說很有效率,所以有另一種型式,基本上就是 A 發送多個請求,然後在回傳一個 ack,然後使用 ack 回傳的編號,就可以知道 B 已經成功了收到多少的資料。
最後斷線的過程如下:
寫到這裡時事實上我有個疑惑,那就是為什麼 B 要在主動發個斷線訊息給 A 呢 ? 後來調了一下發現,A 發送給 B 斷線時,事實上只是和 B 說 A 不在發送訊息了,但 A 還是可以收訊息,所以 B 也要在發個訊息說不在送訊息了,這時雙方都說不在送訊息後,才正式算斷線。
本篇文章咱們學習到了兩個傳輸層的協議 TCP 與 UDP。
它是為了要符合傳輸層最低需求,可以傳送到某個應用程式上的協議,因此它不包證可靠性,但是雖然說不可靠,但是某些高大尚的企業為了追求效能,會使用 UDP 來進行傳輸,然後自已實作一定等級的可靠性機制。
TCP 是為了達到可靠性傳輸而誕生出來的,但是相對的它比較耗資源,在傳輸資料時都需要先透過三次握手來建立連線,然後才能開始傳輸。